﻿using System;
using System.Collections.Generic;
using System.Web;

using System.Web.UI.WebControls;
using System.Web.UI;
using System.Configuration;


namespace EvolSoftWeb
{
    public class BaseForm : System.Web.UI.Page
    {
        /// <summary>
        /// Obtiene el nombre del usuario que inició sesión
        /// </summary>
        public System.String UserName
        {
            get 
            {
                HttpCookie cookie = Request.Cookies[DatosSesion.InicioSesion];

                if (cookie == null)
                {
                    if (Session[DatosSesion.User] != null)
                    {
                        return Session[DatosSesion.User].ToString();
                    }
                    else
                    {
                        Response.Redirect(Constantes.PaginaLogin);
                        return null;
                    }
                }
                else
                {
                    if (cookie[DatosSesion.User] != null)
                    {
                        return cookie[DatosSesion.User].ToString();
                    }
                    else
                    {
                        if (Session[DatosSesion.User] != null)
                        {
                            return Session[DatosSesion.User].ToString();
                        }
                        else
                        {
                            Response.Redirect(Constantes.PaginaLogin);
                            return null;
                        }
                    }
                }                
            }
        }

        /// <summary>
        /// Obtiene el código de cliente consultado
        /// </summary>
        public System.Int32? CodigoCliente
        {
            get
            {
                if (Session[DatosSesion.CodigoCliente] != null)
                {
                    return int.Parse(Session[DatosSesion.CodigoCliente].ToString());
                }
                else 
                {
                    return null;
                }
            }        
        }

        /// <summary>
        /// Obtiene el codigo del vendedor que ha iniciado sesion
        /// </summary>
        public System.String CodigoVendedor
        {
            get 
            {
                if (Session[DatosSesion.CodigoVendedor] != null)
                {
                    return Session[DatosSesion.CodigoVendedor].ToString();
                }
                else
                {
                    return null;
                }           
            }
        }

        /// <summary>
        /// Codigo de empresa de inicio de sesion
        /// </summary>
        public System.String CodEmpresa
        {
            get 
            {
                if (Session[DatosSesion.SesionEmpresa] != null)
                {
                    return Session[DatosSesion.SesionEmpresa].ToString();
                }
                else 
                {                  
                    return null;
                }
            }
        }

        /// <summary>
        /// Codigo de sucursal de inicio de sesion
        /// </summary>
        public System.String CodSucursal
        {
            get
            {
                if (Session[DatosSesion.SesionSucursal] != null)
                {
                    return Session[DatosSesion.SesionSucursal].ToString();
                }
                else
                {                    
                    return null;
                }
            }
        }

        /// <summary>
        /// Tipo de cambio de inicio de sesion
        /// </summary>
        public System.Decimal TipoDeCambio
        {
            get
            {
                if (Session[DatosSesion.SesionTipoCambio] != null)
                {
                    return Convert.ToDecimal(Session[DatosSesion.SesionTipoCambio]);
                }
                else
                {                   
                    return 0;
                }
            }
        }

        /// <summary>
        /// Fecha de inicio de sesion
        /// </summary>
        public System.DateTime FechaSesion
        {
            get
            {
                if (Session[DatosSesion.SesionFechaSesion] != null)
                {
                    return Convert.ToDateTime(Session[DatosSesion.SesionFechaSesion]);
                }
                else
                {                   
                    return DateTime.Now;
                }
            }
        }
        
        /// <summary>
        /// Evento de Carga de la Pagina
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.VerificarLogeo();
                this.Inicializar();
            }        
        }

        /// <summary>
        /// Agrega Funcionalidad JavaScript a la Grilla
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void gvListado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.FindControl(NombreControl.BtnEliminar) != null)
                {
                    ImageButton lb = (ImageButton)e.Row.FindControl(NombreControl.BtnEliminar);
                    lb.Attributes.Add(JavaScript.EventoClick, JavaScript.ConfirmDelete);
                }
            }
        }

        /// <summary>
        /// Controla los comandos sobre la grilla
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void gvListado_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            string id = e.CommandArgument.ToString();

            if (e.CommandName == NombreComando.Editar)
            {
                this.EditarRegistro(id);
            }

            if (e.CommandName == NombreComando.Eliminar)
            {
                this.EliminarRegistro(id);
            }

            if (e.CommandName == NombreComando.Seleccionar)
            {
                this.SeleccionarRegistro(id);
            }
        }

        /// <summary>
        /// Permite filtrar el resultado de la busqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            this.Buscar();
        }

        /// <summary>
        /// Permite realizar busqueda de registros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            this.HabilitarBusqueda();
        }

        /// <summary>
        /// Permite cambiar el cliente seleccionaado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnCambiarCliente_Click(object sender, ImageClickEventArgs e)
        {
            Session[DatosSesion.CodigoCliente] = null;
            Session[DatosSesion.NombreCliente] = null;
            Response.Redirect(Constantes.PaginaSeguimiento +"?" + Constantes.RequestIdPagina +
                "=" + Request[Constantes.RequestIdPagina]);
        }

        /// <summary>
        /// Permite crear un nuevo registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNuevo_Click(object sender, ImageClickEventArgs e)
        {
            this.NuevoRegistro();
        }

        /// <summary>
        /// Permite salir del sistema
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnSalir_Click(object sender, ImageClickEventArgs e)
        {
            this.Salir();
        }


        /// <summary>
        /// Permite grabar un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGrabar_Click(object sender, ImageClickEventArgs e)
        {
            this.Grabar();
        }


        /// <summary>
        /// Permite eliminar un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEliminar_Click(object sender, ImageClickEventArgs e)
        {
            this.Eliminar();
        }

        /// <summary>
        /// Permite regresar a la pantalla anterior
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAtras_Click(object sender, ImageClickEventArgs e)
        {
            this.Retroceder();
        }



        /// <summary>
        /// Permite filtrar el resultado de la busqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            this.LimpiarCampos();
        }

        /// <summary>
        /// Verifica que el usuario haya iniciado sesión y tenga permisos sobre la página
        /// </summary>
        protected void VerificarLogeo()
        { 
        
        }

        /// <summary>
        /// Permite editar el registro seleccionado
        /// </summary>
        /// <param name="id"></param>
        protected virtual void EditarRegistro(string id)
        { 
        
        }

        /// <summary>
        /// Permite elimninar el registro seleccionado
        /// </summary>
        /// <param name="id"></param>
        protected virtual void EliminarRegistro(string id)
        { 
        
        }

        /// <summary>
        /// Permite eliminar un registro
        /// </summary>
        protected virtual void Eliminar()
        { 
        
        }


        /// <summary>
        /// Permite seleccionar el registro seleccionado
        /// </summary>
        /// <param name="id"></param>
        protected virtual void SeleccionarRegistro(string id)
        { 
                
        }

        /// <summary>
        /// Permite realizar búsqueda de registros
        /// </summary>
        protected virtual void Buscar()
        { 
        
        }

        /// <summary>
        /// Habilita la busqueda de registros
        /// </summary>
        protected virtual void HabilitarBusqueda()
        {
        
        }

        /// <summary>
        /// Permite crear un nuevo registro
        /// </summary>
        protected virtual void NuevoRegistro()
        { 
        
        }

        /// <summary>
        /// Metodo que permite inicializar la pagina
        /// </summary>
        protected virtual void Inicializar()
        { 
                    
        }

        /// <summary>
        /// Permite grabar un registro
        /// </summary>
        protected virtual void Grabar()
        { 
        
        }

        /// <summary>
        /// Permite limpiar los datos del formulario
        /// </summary>
        protected virtual void LimpiarCampos()
        { 
        
        }

        /// <summary>
        /// Permite ir a la pantalla anterior
        /// </summary>
        protected virtual void Retroceder()
        {

        }

        /// <summary>
        /// Permite mostrar la pantalla principal de la aplicacion
        /// </summary>
        protected virtual void Salir()
        {
            Response.Redirect(Constantes.PaginaDefault);
        }


        /// <summary>
        /// Realiza una búsqueda de los controles en un formulario y los habilita
        /// </summary>
        /// <param name="pnlControl"></param>
        /// <param name="flag"></param>
        protected void HabilitarControles(Panel pnlControl, bool flag)
        {

            foreach (Control control in pnlControl.Controls)
            {
                if (control is TextBox)
                {
                    ((TextBox)control).Enabled = flag;
                    continue;
                }

                if (control is DropDownList)
                {
                    ((DropDownList)control).Enabled = flag;
                    continue;
                }

                if (control is RadioButton)
                {
                    ((RadioButton)control).Enabled = flag;
                    continue;
                }

                if (control is CheckBox)
                {
                    ((CheckBox)control).Enabled = flag;
                    continue;
                }
            }
        }

        /// <summary>
        /// Limpia el contenido de los controles en un formulario
        /// </summary>
        /// <param name="pnlControl"></param>
        protected void LimpiarCampos(Panel pnlControl)
        {
            foreach (Control control in pnlControl.Controls)
            {
                if (control is TextBox)
                {
                    ((TextBox)control).Text = string.Empty;
                    continue;
                }

                if (control is DropDownList)
                {
                    ((DropDownList)control).SelectedIndex = -1;
                    continue;
                }

                if (control is RadioButton)
                {
                    ((RadioButton)control).Checked = false;
                    continue;
                }

                if (control is CheckBox)
                {
                    ((CheckBox)control).Checked = false;
                    continue;
                }
            }
        }

        /// <summary>
        /// Permite descargar archivos del servidor
        /// </summary>
        protected void DescargarArchivo(string fileName)
        {

            string lstrRuta = Convert.ToString(ConfigurationManager.AppSettings[Constantes.RutaArchivo]).Trim();
            System.IO.FileInfo file = new System.IO.FileInfo(lstrRuta + fileName);

            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/xls";
                Response.WriteFile(file.FullName);
                Response.End();
            }          
        }

        /// <summary>
        /// Permite descargar archivos escel del servidor
        /// </summary>
        protected bool DescargarExcel(string fileName)
        {
            string lstrRuta = Convert.ToString(ConfigurationManager.AppSettings[Constantes.RutaArchivo]).Trim();
            System.IO.FileInfo file = new System.IO.FileInfo(lstrRuta + fileName);

            if (file.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                Response.AddHeader("Content-Length", file.Length.ToString());
                Response.ContentType = "application/xls";
                Response.WriteFile(file.FullName);
                Response.End();
                return true;
            }
            else 
            {
                return false;
            }
        }

        /// <summary>
        /// Permite descargar archivos en general
        /// </summary>
        /// <param name="fileName"></param>
        protected void DescargaFile(string fileName)
        {
            string ruta = ConfigurationManager.AppSettings[DatosConfiguracion.RutSistema];
            string filepath = ruta + fileName;
            System.IO.FileInfo file = new System.IO.FileInfo(filepath);
            string aplicacion = string.Empty;
            if (file.Exists)
            {

                if (file.Extension == ".pdf") aplicacion = "application/pdf";
                if (file.Extension == ".xls" || file.Extension == ".xlsx") aplicacion = "application/vnd.ms-excel";
                if (file.Extension == ".doc" || file.Extension == ".docx") aplicacion = "application/msword";
                if (file.Extension == ".jpg" || file.Extension == ".jpeg") aplicacion = "image/jpeg";
                if (file.Extension == ".gif") aplicacion = "image/gif";
                if (file.Extension == ".png") aplicacion = "image/png";

                if (!string.IsNullOrEmpty(aplicacion))
                {
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                    Response.AddHeader("Content-Length", file.Length.ToString());
                    Response.ContentType = aplicacion;
                    Response.WriteFile(file.FullName);
                    Response.End();
                }
            }
        }

        /// <summary>
        /// Permite descargar archivos en general
        /// </summary>
        /// <param name="fileName"></param>
        protected void DescargaFileSistema(string fileName)
        {
            string ruta = ConfigurationManager.AppSettings[DatosConfiguracion.RutaPDI];
            string filepath = ruta + fileName;
            System.IO.FileInfo file = new System.IO.FileInfo(filepath);
            string aplicacion = string.Empty;
            if (file.Exists)
            {

                if (file.Extension == ".pdf") aplicacion = "application/pdf";
                if (file.Extension == ".xls" || file.Extension == ".xlsx") aplicacion = "application/vnd.ms-excel";
                if (file.Extension == ".doc" || file.Extension == ".docx") aplicacion = "application/msword";
                if (file.Extension == ".jpg" || file.Extension == ".jpeg") aplicacion = "image/jpeg";
                if (file.Extension == ".gif") aplicacion = "image/gif";
                if (file.Extension == ".png") aplicacion = "image/png";

                if (!string.IsNullOrEmpty(aplicacion))
                {
                    Response.Clear();
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                    Response.AddHeader("Content-Length", file.Length.ToString());
                    Response.ContentType = aplicacion;
                    Response.WriteFile(file.FullName);
                    Response.End();
                }
            }
        }

        /// <summary>
        /// Muestra los datos del cliente
        /// </summary>
        protected void MostrarCliente()
        {
            //if (Session[DatosSesion.CodigoCliente] != null)
            //{
            //    if (Session[DatosSesion.NombreCliente] != null)
            //    {
            //        this.lblCLiente.Text = Session[DatosSesion.NombreCliente].ToString();
            //    }
            //    else
            //    {
            //        int idCliente = int.Parse(Session[DatosSesion.CodigoCliente].ToString());
            //        TdClienteMae cliente = (new ClienteLogic()).ObtenerCliente(idCliente);

            //        if (cliente.NomCliente.Length > 30)
            //            this.lblCLiente.Text = cliente.NomCliente.Substring(0, 30) + "...";
            //        else this.lblCLiente.Text = cliente.NomCliente;
                    
            //        Session[DatosSesion.NombreCliente] = this.lblCLiente.Text;
            //    }
            //}        
        }

        /// <summary>
        /// Valida la sesión del cliente
        /// </summary>
        protected void ValidarSesionCliente()
        {
            if (this.CodigoCliente == null)
            {
                Response.Redirect(Constantes.PaginaSeguimiento + "?" + Constantes.RequestIdPagina +
                "=" + Request[Constantes.RequestIdPagina]);
            }
            else 
            {
                this.MostrarCliente();
            }
        }

        #region Controles Comunes
        
        /// <summary>
        /// lblCLiente control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.WebControls.Label lblCLiente;

        /// <summary>
        /// btnCambiarCliente control.
        /// </summary>
        /// <remarks>
        /// Auto-generated field.
        /// To modify move field declaration from designer file to code-behind file.
        /// </remarks>
        protected global::System.Web.UI.WebControls.ImageButton btnCambiarCliente;


        /// <summary>
        /// Obtiene el identificador unico de un control
        /// </summary>
        /// <param name="ctrl"></param>
        /// <returns></returns>
        protected string ObtenerIdUnico(Control ctrl)
        {
            string sId = ctrl.UniqueID;
            if (sId == null)
            {
                return null;
            }
            if (sId.IndexOf(':') >= 0)
            {
                return sId.Replace(':', '$');
            }
            return sId;
        }

        #endregion
    }

}